#include<iostream>
using namespace std;
int N,M;
struct  Pos{
    int w,d;
};
Pos p[3410];
int dp[12890];
int main(){
    cin>>N>>M;
    for(int i=1;i<=N;i++){
        cin>>p[i].w>>p[i].d;
    }
    for(int i=N;i>=1;i--){
        for(int j=M;j>=0;j--){
            if(j>=p[i].w){
                dp[j]=max(dp[j],dp[j-p[i].w]+p[i].d);
            }
        }
    }
    cout<<dp[M]<<endl;
    return 0;
}